package com.baichuan.util;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;

/**
 * @Auther: leo
 * @Date: 2020/4/5 12:07
 * @Description:
 */
public class DoubleUtil {
    /**
     * 保留两位小位，四舍五入
     *
     * @param d
     * @return
     */
    public static double formatDouble2HalfUp(double d, int scale) {
        BigDecimal bg = new BigDecimal(d).setScale(scale, RoundingMode.HALF_UP);
        return bg.doubleValue();
    }

    /**
     * 保留两位小位，四舍五入
     *
     * @param d
     * @return
     */
    public static double formatDouble2HalfUp(double d) {
        BigDecimal bg = new BigDecimal(d).setScale(2, RoundingMode.HALF_UP);
        return bg.doubleValue();
    }

    public static double formatDouble2Down(double d) {
        BigDecimal bg = new BigDecimal(d);
        bg.setScale(2, RoundingMode.DOWN);
        return bg.doubleValue();
    }

    public static String formatDouble2UpStr(double d) {
        NumberFormat nf = NumberFormat.getNumberInstance();
        // 保留两位小数
        nf.setMaximumFractionDigits(2);
        // 如果不需要四舍五入，可以使用RoundingMode.DOWN
        nf.setRoundingMode(RoundingMode.UP);
        return nf.format(d);
    }

    public static String formatDouble2DownStr(double d) {
        NumberFormat nf = NumberFormat.getNumberInstance();
        // 保留两位小数
        nf.setMaximumFractionDigits(2);
        // 如果不需要四舍五入，可以使用RoundingMode.DOWN
        nf.setRoundingMode(RoundingMode.DOWN);
        return nf.format(d);
    }

    /**
     * 乘法运算。
     */
    public static double mul(double v1, double... v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        for (double vv : v2) {
            BigDecimal b2 = new BigDecimal(Double.toString(vv));
            b1 = b1.multiply(b2);
        }
        return b1.doubleValue();
    }

    /**
     * 加法
     */
    public static double add(double v1, double... v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        for (double vv : v2) {
            BigDecimal b2 = new BigDecimal(Double.toString(vv));
            b1 = b1.add(b2);
        }
        return b1.doubleValue();
    }

    /**
     * 减法
     */
    public static double sub(double v1, double... v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        for (double vv : v2) {
            BigDecimal b2 = new BigDecimal(Double.toString(vv));
            b1 = b1.subtract(b2);
        }

        return b1.doubleValue();
    }

    public static String formatMoney(Double value) {
        return getFormat(",###.00", value);
    }

    //自定义数字格式方法
    public static String getFormat(String style, Double value) {
        DecimalFormat df = new DecimalFormat();
        df.applyPattern(style);// 将格式应用于格式化器
        return df.format(value.doubleValue());
    }
}
